package com.atguigu.demo.config;

import com.atguigu.demo.utils.R;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class MyExceptionHandler {

    // value 属性：如果 SpringMVC 捕获到 ArithmeticException 异常，则执行此方法
    @ExceptionHandler(value = {ArithmeticException.class})
    public R handleException(
            // 声明形参接收 SpringMVC 捕获到的异常对象
            ArithmeticException e) {

        // 方法返回值是给浏览器的响应
        return R.fail(e.getMessage() + " 数学异常");
    }

    // 针对想要处理的不同异常类型，可以使用不同的方法进行处理
    // 异常类型优先匹配更精确的类型
    @ExceptionHandler(value = {NullPointerException.class})
    public R handleException(NullPointerException e) {

        return R.fail(e.getMessage());
    }

    // 针对想要处理的不同异常类型，可以使用不同的方法进行处理
    // 异常类型优先匹配更精确的类型
    @ExceptionHandler(value = {Exception.class})
    public R handleException(Exception e) {
        return R.fail(e.getMessage() + " 全局异常");
    }
}
